﻿// 3653. 好坑的电子地图.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <queue>
#include <memory.h>


using namespace std;
/*
https://www.acwing.com/problem/content/3656/

小明是今年参加复试的外校考生，他要去民主楼小礼堂签到。

由于对中南大学校本部很不熟悉，小明找到了这边读书的好朋友鲁大师，不巧，鲁大师在忙着自由探索项目的结题工作，不能给他带路，
只好给他发了一份半成品的电子地图。

地图上只列出了校本部内的 N个点，M条路，小明处于 S点，民主楼小礼堂是 T点。

小明感谢鲁大师，当然只是在拿到地图的一瞬间，后面的情况让他知道这半成品到底有多坑。

鲁大师制作的电子地图是带有语音提示功能的，但是在编号为奇数的点他要等 1 分钟才能告诉他具体怎么走，
 而在编号为偶数的点要等 2分钟。现在告诉你地图的具体情况，小明想知道他能不能在 A分钟内赶到民主楼小礼堂。

输入格式
输入包含多组测试数据。

每组数据第一行包含 5个整数，N,M,S,T,A。

接下来 M 行，每行三个数字 u,v,t，代表每条路的两个顶点和步行时间。

输出格式
每组数据输出一行结果，小明能在 A
 分钟内赶到民主楼小礼堂输出 YES 和最少花费的时间，否则输出 KENG。

数据范围
0<N<M<1000
,
1≤S,T,u,v≤N
,
1≤A,t≤1000
输入样例：
5 4 2 4 7
1 2 5
5 4 2
3 5 1
2 3 1
4 3 1 4 10
1 2 1
3 2 2
3 4 3

输出样例：
KENG
YES 10


10 20 9 3 20
8 1 6
1 2 2
3 7 2
3 4 4
2 4 8
3 5 1
6 8 5
8 7 5
7 9 3
5 6 1
1 3 10
8 10 1
1 7 2
9 3 8
2 9 3
9 10 3
4 8 5
4 7 4
10 3 3
1 6 4

YES 7
*/


typedef pair<int, int> PII;

const int N = 1010, M = 2020;
int h[N], e[M], ne[M], w[M], idx;
int dist[N];
bool st[N];
int n, m, s, t, a;

void init() {
    memset(h, -1, sizeof h);
    idx = 0;

}

void add(int a, int b, int c) {
    e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}

// 求1号点到n号点的最短距离，如果不存在，则返回-1
int dijkstra(int s, int t)
{
    memset(dist, 0x3f, sizeof dist);
    memset(st, 0, sizeof st);
    dist[s] = 0;
    priority_queue<PII, vector<PII>, greater<PII>> heap;
    heap.push({ 0,s });      // first存储距离，second存储节点编号

    while (heap.size())
    {
        auto t = heap.top();
        heap.pop();

        int ver = t.second, distance = t.first;

        if (st[ver]) continue;
        st[ver] = true;

        for (int i = h[ver]; i != -1; i = ne[i])
        {
            int j = e[i];
            if (dist[j] > distance + w[i])
            {
                dist[j] = distance + w[i];
                heap.push({ dist[j], j });
            }
        }
    }

    //if (dist[n] == 0x3f3f3f3f) return -1;
    return dist[t];
}


int main()
{
    while (cin >> n >> m >> s >> t >> a) {
        init();
        for (int i = 0; i < m; i++) {
            int a, b, c; cin >> a >> b >> c;
            if (a % 2 == 0) {
                add(a, b, c + 2);
            }
            else {
                add(a, b, c + 1);
            }
            if (b % 2 == 0) {
                add(b, a, c + 2);
            }
            else {
                add(b, a, c + 1);
            }

        }
        int time = dijkstra(s, t);
        if (time <= a) {
            cout << "YES " << time << endl;
        }
        else {
            cout << "KENG" << endl;
        }

    }


    return 0;
}

